
import java.util.*;


public class PriorityQueueExample {

	static class Patient implements Comparable {

		public String name;
		public String problem;
		public int priority;
		public int number;

		public Patient(String _name, String _problem,
						int _priority, int _number) {
			name = _name;
			problem = _problem;
			priority = _priority;
			number = _number;
		}

		public String toString() {
			return "name: " + name + ", problem: " + problem;
		}

		public int compareTo(Object obj) {
			Patient p = (Patient)obj;
			if (priority < p.priority) {
				return 1;
			}
			else if (priority > p.priority) {
				return -1;
			}
			else {
				if (number < p.number) {
					return -1;
				}
				else if (number > p.number) {
					return 1;
				}
				else {
					return 0;
				}
			}
		}

		public boolean equals(Object obj) {
			if (obj != null && obj instanceof Patient) {
				return compareTo(obj) == 0;
			}
			return false;
		}
	}

	public static void main(String[] args) {
		Queue q = new PriorityQueue();
		int number = 0;
		
		Scanner input = new Scanner(System.in);
		
		boolean done = false;
		while (!done) {
			System.out.print("\n? ");

			String verb = input.next();

			if (verb.equals("arrive")) {
				String name = input.next();
				String problem = input.next();
				int priority = input.nextInt();
				q.offer(new Patient(name, problem, priority, ++number));
			}
			else if (verb.equals("treat")) {
				Patient patient = (Patient)q.poll();
				if (patient == null) {
					System.out.println("No patients, take a break");
				}
				else {
					System.out.println(patient);
				}
			}
			else if (verb.equals("exit")) {
				done = true;
			}

			input.nextLine();
		}
	}

}
